package com.seu.spring.advance.ioc;

/**
 * BeanPostProcessor接口是Spring对外拓展的接口之一，其主要用途提供一个机会，让开发人员能够插手bean的实例化过程。
 * 通过实现这个接口，我们就可在bean实例化时，对bean进行一些处理。
 * 比如，我们所熟悉的AOP就是在这里将切面逻辑织入相关bean中的。
 * 正是因为有了BeanPostProcessor接口作为桥梁，才使得AOP可以和IOC容器产生联系。
 * <p>
 * 用于在bean定义初始化时嵌入相关操作
 * 例如：在 postProcessorAfterInitialization 方法中，使用动态代理的方式，返回一个对象的代理对象。解决了
 * 在 IoC 容器的何处植入 AOP 的问题。
 *
 * @author liangfeihu
 * @since 2018/12/28 15:39
 */
public interface BeanPostProcessor {

    /**
     * 初始化之前
     *
     * @param bean
     * @param beanName
     * @return
     * @throws Exception
     */
    Object postProcessBeforeInitialization(Object bean, String beanName) throws Exception;

    /**
     * 初始化之后
     *
     * @param bean
     * @param beanName
     * @return
     * @throws Exception
     */
    Object postProcessAfterInitialization(Object bean, String beanName) throws Exception;

}
